"""
__author__ = 'heyanmin'
__time__ = '2021/8/7 2:53 下午'
"""
"""" java 数组 python 列表
数组：线性表数据结构，用连续的内存空间存储相同类型的数据。
线性表：线性表是数据排成一条线一样的结构。每个线性表上的数据最多只有前和后两个方向。
包括：数组，链表、队列、栈。
非线性表：数据之间并不是简单的前后关系。
包括：二叉树、堆、图等。
连续的内存空间和相同类型的数据：使数组支持“随机访问”。但在数组中删除、插入数据时，需要做大量的数据搬移工作。"""
# 基础的数组包含了 查找 删除 添加操作; 插元素 ，找元素，注意边界，范围，
# 插入元素会后置
# range(start, stop[, step]) 可迭代对象，start 默认0 range(0,5) 0,1,2,3,4
class Array:
    def __init__(self,capacity):
        # 定义一个数组，存数据，假设数组的初始值是-1
        self.data = [-1]*capacity
        #记录存了多少数据，一开始是没有，所以是0
        self.count = 0
        # 数组的容量，存储的最大值
        self.n = capacity

#插入的位置 和数值
    def insert(self,location,value):
        if self.n == self.count:
            return False
        if location < 0 or location > self.count:
            return False
        for i in range(self.count,location,-1):
            self.data[i] = self.data[i-1]
        self.data[location] = value
        self.count +=1
        return True
    # 查找，判断位置。 循环.。查的是位置，所以等于
    def find(self,location):
        if location < 0 or location >= self.count:
            return False
        else:
            return self.data[location]

    #删除 后面的元素，往前移
    def delete(self,location):
        if location < 0 or location >= self.count:
            return False
        for i in range(location+1,self.count):
            self.data[i-1] = self.data[i]
        self.count -= 1
        return True


def test_demo():
    array = Array(5)
    array.insert(0, 1)
    array.insert(1, 2)
    array.insert(2, 3)
    array.insert(3, 4)
    array.insert(4, 5)

    # 判断插入不成功
    # assert not array.insert(0, 100)
    assert array.find(0) == 1
    assert array.find(2) == 3
    assert array.find(4) == 5
    # assert array.find(10) == -1
    assert array.count == 5
    removed = array.delete(4)
    assert removed
    assert array.find(4) == -1
    # removed = array.delete(10)
    # assert not removed
    # 2 3 4 1 5
    assert array.data == [1,2,3,4,5]

if __name__ == '__main__':
    test_demo()

